package weektwo;

import java.util.HashMap;
import java.util.Map;

public class FindShortestSubArray_697 {
    public int findShortestSubArray(int[] nums) {
        //用map记录元素起始位置和出现次数
        //每次count++，然后更新minwindow，因为只需要返回大小，所以每次更新minWindow就好
        //大于当前最大次数，minWindow更新为当前元素的起始位置和当前位置的大小
        //如果等于当前maxTimes，说明有多个元素出现次数相同，需要更新minWindow为起始位置和结束位置距离最小的元素距离。

        Map<Integer, int[]> map = new HashMap<>();
        int maxTimes = 0;
        int minWindow = 0;
        for (int i = 0; i < nums.length; i++) {
            int[] tuple;
            if (map.containsKey(nums[i])) {
                tuple = map.get(nums[i]);
                tuple[1]++;
            } else {
                tuple = new int[]{i, 1};
                map.put(nums[i], tuple);
            }

            if (tuple[1] > maxTimes) {
                maxTimes = tuple[1];
                minWindow = i - tuple[0] + 1;
            } else if (tuple[1] == maxTimes) {
                minWindow = Math.min(minWindow, i - tuple[0] + 1);
            }
        }

        return minWindow;
    }
}
